#include "Spel.h"

#include "GameController.h"

Spel::Spel()
{
	/* speler cxts init */
	m_spelerCxts = new vector<SpelerContext>;

	/* gamecontroller init */
	m_gameController = new GameController(this);

	/* mogelijke kleuren vastleggen */
	kleuren = new vector<string>;
	kleuren->push_back(string("blauw"));
	kleuren->push_back(string("geel"));
	kleuren->push_back(string("rood"));
	kleuren->push_back(string("groen"));
	kleuren->push_back(string("oranje"));
	kleuren->push_back(string("roos"));

	/* gebruikte kleuren vector */
	gebruikteKleuren = new vector<string>;

	m_gameFinished_Flag = 0;

}

void Spel::addNwSpeler(string naam, string kleur, string ip)
{
	// context aanmaken
	SpelerContext * tempCxt = new SpelerContext(kleur);
	
	// netwerkspeler aanmaken
	NetwerkSpeler * nwSpeler = new NetwerkSpeler(naam, kleur, ip);
	tempCxt->setSpeler(nwSpeler);

	/* spelercontext in vector stoppen*/
	m_spelerCxts->push_back(*tempCxt);

	/* kleur aan gebruikte kleuren toevoegen */
	gebruikteKleuren->push_back(kleur);

}

void Spel::addNwSpeler(string naam, string kleur)
{
	// context aanmaken
	SpelerContext * tempCxt = new SpelerContext(kleur);
	
	// netwerkspeler aanmaken
	NetwerkSpeler * nwSpeler = new NetwerkSpeler(naam, kleur);
	tempCxt->setSpeler(nwSpeler);

	/* spelercxts aan vector toevoegen */
	m_spelerCxts->push_back(*tempCxt);

	/* kleur aan gebruikte kleuren toevoegen */
	gebruikteKleuren->push_back(kleur);
}
	
void Spel::addAiSpeler(string naam, string kleur)
{
	// context aanmaken
	SpelerContext * tempCxt = new SpelerContext(kleur);
	
	// netwerkspeler aanmaken
	AiSpeler * aiSpeler = new AiSpeler(naam, kleur);
	tempCxt->setSpeler(aiSpeler);

	/* spelercxt in vector steken */
	m_spelerCxts->push_back(*tempCxt);

	/* kleur aan gebruikte kleuren toevoegen */
	gebruikteKleuren->push_back(kleur);
}

string Spel::randomColor()
{
	bool found = false, reedsGebruikt;
	string * returnValue;
	int i = 0;

	while(!found){

		reedsGebruikt = false;

		for(int j = 0; j < gebruikteKleuren->size(); j++)
			if(strcmp(kleuren->at(i).c_str(),gebruikteKleuren->at(j).c_str()) == 0)
				reedsGebruikt = true;

		if(!reedsGebruikt)
			found = true;
		else
			i++;
		
	}

	return kleuren->at(i);

}

void Spel::setMap()
{
	m_map = new Map();
	m_map->loadMap(m_mapNaam);

}
